/**
* Copyright 2013 ABSir's Studio
*
* All right reserved
*
* Create on 2013-5-3 上午10:25:26
*/
package com.android.pc.ioc.view.listener;
import java.lang.reflect.Method;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.TextView;
import com.android.pc.ioc.app.Ioc;
import com.android.pc.ioc.core.kernel.KernelClass;
import com.android.pc.ioc.core.kernel.KernelReflect;
import com.android.pc.ioc.core.kernel.KernelString;
/**
* @author absir
*
*/
public class OnTextChanged extends OnListener implements TextWatcher {
/** beforeMethod */
private String beforeMethod;
/** beforeTargetMethod */
private Method beforeTargetMethod;
/** afterMethod */
private String afterMethod;
/** afterTargetMethod */
private Method afterTargetMethod;
/*
* (non-Javadoc)
*
* @see android.text.TextWatcher#beforeTextChanged(java.lang.CharSequence, int, int, int)
*/
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
if (beforeMethod != null) {
beforeTargetMethod = KernelReflect.assignableMethod(target.getClass(), beforeMethod, 0, true, KernelClass.parameterTypes(new Object[] { s, start, count, after }));
beforeMethod = null;
}
if (beforeTargetMethod != null) {
KernelReflect.invoke(target, beforeTargetMethod, s, start, count, after);
}
}
/*
* (non-Javadoc)
*
* @see android.text.TextWatcher#afterTextChanged(android.text.Editable)
*/
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if (afterMethod != null) {
afterTargetMethod = KernelReflect.assignableMethod(target.getClass(), afterMethod, 0, true, KernelClass.parameterTypes(new Object[] { s }));
afterMethod = null;
}
if (afterTargetMethod != null) {
KernelReflect.invoke(target, afterTargetMethod, s);
}
}
/*
* (non-Javadoc)
*
* @see android.text.TextWatcher#onTextChanged(java.lang.CharSequence, int, int, int)
*/
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
invoke(s, start, before, count);
}
/*
* (non-Javadoc)
*
* @see com.absir.android.view.listener.Listener#listener(android.view.View)
*/
@Override
protected void listener(View view) {
// TODO Auto-generated method stub
if (view instanceof TextView) {
String[] methods = method.split(",");
if (methods.length > 1) {
method = methods[0];
beforeMethod = methods[1];
if (methods.length > 2) {
afterMethod = methods[2];
}
} else {
beforeMethod = "none" + KernelString.uncapitalize(method);
beforeMethod = "after" + KernelString.uncapitalize(method);
}
((TextView) view).addTextChangedListener(this);
} else {
Ioc.getIoc().getLogger().e(view.getClass() + " 无法设置OnTextChanged 请检查InjectMethod的参数\n");
}
}
}